package model

/*
p类目表
id	类目名称			父id	品牌
1	男鞋				0		1
2	运动鞋			1		1


p类目属性属性表	(类目表[1] -> 类目属性属性表[多])
id	类目id	属性名		属性code
1	1		颜色			color
2	1		鞋码			size


p品牌表	(类目表[多] -> 品牌表[多])
id	品牌名称	类目
1	耐克		1


s商品头表 goods_hdt	（商品头表[1] -> 类目表[1]，商品头表[1] -> 品牌表[1]）
id	商品名称 					类目			品牌		是否包邮		是否热卖 	 	搜藏数	点击数	单位		包装单位	前端展示图		详情图list
1	怎么穿都不臭脚的运动鞋		1			1		是			是			10		100		双		箱		http//:a.png	[1.png,2.png]

s商品类目属性属性值表	（商品头表[1] ->	商品类目属性属性值表[多]）
id	商品id	类目属性id	属性值	属性图片(非必填)
1	1		1			白色		http//:a.png
2	1		1			黑色		http//:a.png
3	1		1			红色		http//:a.png
4	1		2			41
5	1		2			42
6	1		2			43
7	1		2			44

s商品类目属性详情表 goods_sku	(商品头表[1] ->	商品类目属性详情表[多])
id	商品id	商品类目属性属性值集合		价格				优惠价格
1	1		{color: 1, size: 4}		110				110*0.8			怎么穿都不臭脚的运动鞋		颜色：白色-尺寸：41	110元	优惠价88
2	1		{color: 1, size: 5}		120				120*0.8
3	1		{color: 1, size: 6}		130				130*0.8
4	1		{color: 1, size: 7}		140				140*0.8

5	1		{color: 2, size: 4}		150				150*0.8
6	1		{color: 2, size: 5}		160				160*0.8
7	1		{color: 2, size: 6}		170				170*0.8
8	1		{color: 2, size: 7}		180				180*0.8

9	1		{color: 3, size: 4}		190				190*0.8
10	1		{color: 3, size: 5}		200				200*0.8
11	1		{color: 3, size: 6}		300				300*0.8
12	1		{color: 3, size: 7}		400				400*0.8

某个款式卖完了，就禁用

s商品类目属性库存表 stock （goods_dtl[1] -> stock[多]）
id	商品类目详情表id	库存		仓库id		库位id
1	1				100		1			1
2	2				100		1			2
3	3				100		1			3
4	14				100		1			4

5	5				100		1			5
6	6				100		1			6
7	7				100		1			7
8	8				100		1			8

9	9				100		1			9
10	10				100		1			10
11	11				100		1			11
12	12				100		1			12
13	12				200		2			13		// 模拟商品在另一个仓库也有
*/

// Category 类目表
type Category struct {
	Id                uint64              `gorm:"type:bigint unsigned;primary_key;comment:主键"`
	Name              string              `gorm:"column:name;type:varchar(20);not null;comment:名称"`
	ParentId          uint64              `gorm:"column:parent_id;type:bigint unsigned;not null;default:0;comment:上级id"`
	IsTab             bool                `gorm:"column:is_tab;type:tinyint unsigned;not null;default:false;comment:是否显示在tab上"`
	Brands            []Brand             `gorm:"many2many:category_brand"`
	CategoryAttribute []CategoryAttribute `gorm:"foreignKey:CategoryId"`
	Model
}

type CategoryAttribute struct {
	Id         uint64 `gorm:"type:bigint unsigned;primary_key;comment:主键"`
	CategoryId uint64 `gorm:"column:category_id;type:bigint unsigned;not null;comment:分类id"`
	Name       string `gorm:"column:name;type:varchar(20);not null;comment:属性名称"`
	Code       string `gorm:"column:code;type:varchar(20);not null;comment:属性code"`
	Model
}

// Brand 品牌表
type Brand struct {
	Id        uint64     `gorm:"type:bigint unsigned;primary_key;comment:主键"`
	Name      string     `gorm:"column:name;type:varchar(20);not null;comment:品牌名称"`
	Logo      string     `gorm:"column:logo;type:varchar(200);not null;comment:品牌logo"`
	Categorys []Category `gorm:"many2many:category_brand"`
	Model
}

// CategoryBrand 这张表就是多对多关系生成的表
//type CategoryBrand struct {
//	CategoryId uint64 `gorm:"column:category_id;type:bigint unsigned;idx_category_brand;unique;comment:分类id"`
//	Category   Category
//	BrandId    uint64 `gorm:"column:brand_id;type:bigint unsigned;idx_category_brand;unique;comment:品牌id"`
//	Brand      Brand
//}

// Banner 轮播图
type Banner struct {
	Id    uint64 `gorm:"type:bigint unsigned;primary_key;comment:主键"`
	Image string `gorm:"column:image;type:varchar(200);not null;comment:图片地址"`
	Url   string `gorm:"column:url;type:varchar(200);not null;comment:点击图片跳转的url"`
	index int64  `gorm:"column:index;type:int unsigned;not null;default:1;comment:图片顺序"`
	Model
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// MySQL数据库中表示金额字段类型
// https://blog.csdn.net/li875817550/article/details/78347052
// https://blog.csdn.net/weixin_40807247/article/details/90736221
// https://www.cnblogs.com/owenma/p/7097602.html

//type Shop struct {
//	Id      uint64 `gorm:"type:bigint unsigned;primary_key;comment:主键"`
//	Name    string `gorm:"column:name;type:varchar(50);not null;comment:名称"`
//	Type    string `gorm:"column:type;type:varchar(10);not null;comment:类型"`
//	Level   int64  `gorm:"column:level;type:int unsigned;not null;default:0;comment:店铺等级"`
//	Disable bool   `gorm:"column:disable;type:tinyint unsigned;not null;default:false;comment:是否禁用"`
//	// ...
//	Model
//}

// Goods 商品表
type Goods struct {
	Id       uint64 `gorm:"type:bigint unsigned;primary_key;comment:主键"`
	Name     string `gorm:"column:name;type:varchar(50);not null;comment:名称"`
	GoodsNo  string `gorm:"column:goods_no;type:varchar(50);not null;comment:商品编号"` // 商家自行维护
	ClickNum uint64 `gorm:"column:click_num;type:bigint unsigned;not null;default:0;comment:商品点击数量"`
	SoldNum  uint64 `gorm:"column:sold_num;type:bigint unsigned;not null;default:0;comment:销量"`
	FavNum   uint64 `gorm:"column:fav_num;type:bigint unsigned;not null;default:0;comment:收藏数量"`

	GoodsBrief string      `gorm:"column:goods_brief;type:varchar(100);not null;comment:商品简介"`
	Images     CustomArray `gorm:"column:images;type:varchar(1000);not null;comment:商品图片"`
	DescImages CustomArray `gorm:"column:desc_images;type:varchar(1000);not null;comment:商品详情图片"`
	FrontImage string      `gorm:"column:front_image;type:varchar(200);not null;comment:商品正面图片"`

	CategoryId uint64 `gorm:"column:category_id;type:bigint unsigned;not null;comment:分类id"`
	Category   Category
	BrandId    uint64 `gorm:"column:brand_id;type:bigint unsigned;not null;comment:品牌id"`
	Brand      Brand

	IsSale   bool `gorm:"column:is_sale;type:tinyint unsigned;not null;default:false;comment:是否上架"`
	FreeShip bool `gorm:"column:free_ship;type:tinyint unsigned;not null;default:false;comment:是否免运费"`
	IsNew    bool `gorm:"column:is_new;type:tinyint unsigned;not null;default:false;comment:是否新品"`
	IsHot    bool `gorm:"column:is_hot;type:tinyint unsigned;not null;default:false;comment:是否是热卖商品"`

	//ShopId uint64 `gorm:"column:shop_id;type:bigint unsigned;not null;default:0;comment:商品所属店铺"`
	//Shop   Shop

	//GoodsSkus []GoodsSku `gorm:"foreignKey:GoodsId"` // 一个商品有多个sku
	Model
}

// GoodsSku 商品类目属性属性值表
type GoodsSku struct {
	Id                   uint64    `gorm:"type:bigint unsigned;primary_key;comment:主键"`
	GoodsId              uint64    `gorm:"column:goods_id;type:bigint unsigned;index:idx_goods_id;not null;comment:商品id"`
	CategoryAttributeIds CustomMap `gorm:"column:category_attribute_ids;type:varchar(1000);comment:分类属性集合id"` // 商品类目属性属性值集合
	MarketPrice          float64   `gorm:"column:market_price;type:double unsigned;not null;comment:市场价"`     // 不写类型，gorm默认就是double
	ShopPrice            float64   `gorm:"column:shop_price;type:double unsigned; not null;comment:优惠价"`
	Stock                uint64    `gorm:"column:stock;type:bigint unsigned;not null;comment:库存数量"` // 像淘宝，拼多多都是商家自己维护库存，这里简单设计，系统自己维护
	Model
}

// StoreStock 库存表,像淘宝，拼多多都是商家自己维护库存
//type StoreStock struct {
//	Id         uint64 `gorm:"type:bigint unsigned;primary_key;comment:主键"`
//	GoodsSkuId uint64 `gorm:"column:goods_sku_id;type:bigint unsigned;index:idx_goods_id;unique;not null;comment:商品SkuId"`
//	Qty        uint64 `gorm:"column:qty;type:bigint unsigned;not null;default:0;comment:库存数量"`
//	StoreId    uint64 `gorm:"column:store_id;type:bigint unsigned;index:idx_store_id;unique;not null;comment:仓库id"`
//	Location   uint64 `gorm:"column:location;type:bigint unsigned;unique;not null;comment:库位"`
//	Model
//}
